// 1.注意C语言中的空格需要单引号表示 ' '
// 2. 还有注意需要考虑总的字符串的结束点的位置

// 总的解题思路：先求出计算子串的长度，进行处理，子串的反转同344题一样的解法
/* 核心的反转解法代码：
    for (idx = start; idx < (start + sublen / 2); idx++)
    {
        temp = s[idx];
        // 注意end的结束点是否需要减1
        s[idx] = s[end - 1 - idx + start];
        s[end - 1 - idx + start] = temp;
    }
*/
char *reverseWords(char *s)
{
    int len = strlen(s);
    char temp;
    int i;
    int start;
    int end;
    int sublen = 0;
    int idx;
    for (i = 0; i <= len; i++)
    {
        // 匹配到空格 或者 达到最后一个单词
        if ((s[i] == ' ') || (i == len))
        {
            // 判断是否为空字符串
            if (sublen == 0)
            {
                continue;
            }

            end = i;
            start = end - sublen;
            // debug print
            //printf("start %d end %d i: %d\n",start, end , i);
            // 进行子串反转
            for (idx = start; idx < (start + sublen / 2); idx++)
            {
                temp = s[idx];
                s[idx] = s[end - 1 - idx + start];
                s[end - 1 - idx + start] = temp;
                //debug print
                //printf("%s\n",s);
            }
            // 复位sublen计数
            sublen = 0;
        }
        else
        {
            sublen++;
            //debug print
            //printf("sublen :%d\n",sublen);
        }
    }

    return s;
}